<?php /*?><?php */

//实例，图像验证码

/*1.产生随机4位字符,并将码值存入session
2.创建一个空的画布.绘制带填充的矩形
3.分配颜色：背景色、文字颜色
4.往图像上写入TTF字符串：imgettftext()
5.输出图像，并销毁图像
*/
//产生随机4位的字符串
$arr = array_merge(range('A', 'Z'), range(0, 9), range('a', 'z'));
//打乱数组两次
shuffle($arr);
shuffle($arr);
$arr2 = array_rand($arr, 4); //从数组中随机取出4个下标
//循环$arr2,取出指定下标对应的元素的值
$str = '';
foreach ($arr2 as $index) {
	$str .= $arr[$index];
}

//开启SESSION，存储验证码的值
session_start();
$_SESSION['v'] = $str;

//输出4位验证码
//print_r($str);

//2.创建一个空的画布并分配颜色
$width = 100;
$height = 50;
$img = imagecreatetruecolor($width, $height);

//3.绘制一个矩形并填充
//颜色是随机分配颜色，rgb，0-255,用mt_rand(min,max)
$color1 = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
//imagefilledrectangle,第一个参数是目标画布，第二第三参数起始点的x,y  第四第五个参数终止点x,y，第六个参数矩形背景颜色
imagefilledrectangle($img, 0, 0, $width, $height, $color1);

//4.绘制像素点
for ($i = 1; $i <= 200; $i++) {
	//每一个点的颜色也随机生成
	$color2 = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
	//imagesetpixel(画布,画布的一个x，画布的一个y，像素点的颜色)
	imagesetpixel($img, mt_rand(0, $width), mt_rand(0, $height), $color2);
	//绘制干扰线条
	if ($i % 20 == 0) {
		imageline($img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $color2);
	}
}
//5.写入一行TTF的字符串，将验证码字符串，写入到图像上
$color3 = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
$fontfile = "D:/phpStudy/WWW/life_mall/Public/fontfile/STLITI.TTF"; //必须是绝对路径，用的是华文隶书
$font_width = $width * 0.1; //定义字体在画布的位置x
$font_height = $height * 0.7; //定义字体在画布的位置y
imagettftext($img, 28, 0, $font_width, $font_height, $color3, $fontfile, $str);

//6.输出图像到浏览器
header("Content-type:image/png");
imagepng($img);

//7销毁图像
imagedestroy($img);
